package sanmubird.club.mock.minenv;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;
import sanmubird.club.mock.service.MockRemoteInvokeService;

/**
 * @author sam
 * @date 2019/12/8 11:47
 * @description 功能描述
 */

@RunWith(SpringRunner.class)
public class MockBeanAnnotationTest2 {

	//mock对象 这里 说明 @MockBean 其实是和 @Mock 作用是一样的 都是 简化了 对象的创建 只不过 MockBean 适配于 Spring 框架
	@MockBean
	MockRemoteInvokeService mockRemoteInvokeService;

	@Autowired
	ApplicationContext context;


	@Test
	public void givenCountMethodMocked_WhenCountInvoked_ThenMockedValueReturned() {

		//指定mock对象的行为
		Mockito.when(mockRemoteInvokeService.remoteInvoke()).thenReturn("remote");

		final MockRemoteInvokeService bean = context.getBean(MockRemoteInvokeService.class);

		//调用mock对象
		final String s = bean.remoteInvoke();

		Assert.assertEquals(s, "remote");

		//验证 remoteInvoke 的方法被调用
		Mockito.verify(bean).remoteInvoke();
	}

}
